perm filename PROTFF.SAI[AER,HPM] blob sn#157906 filedate 1975-05-07 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00002 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	BEGIN "PROFFT"
C00005 ENDMK
C⊗;
BEGIN "PROFFT"
REQUIRE "PIXNIC.SAI[VIS,HPM]" SOURCE_FILE;
REQUIRE "FFTNIC.SAI[NUM,HPM]" SOURCE_FILE;

INTEGER I,J,K,PSIZ,PXMAX;
INTEGER HI,WI,MH,MW;
STRING INFL,OUFL;

OUTSTR("INPUT FILE:"); INFL←INCHWL;
OUTSTR("OUTPUT FILE:"); OUFL←INCHWL;

   BEGIN
   INTEGER ARRAY PIC[0:PFLDIM(INFL)];
   GETPFL(INFL,PIC[0]);
   PSIZ←PIC[PCBY];

   HI←PIC[PCLN]; WI←PIC[LNBY]; PXMAX←2↑PIC[BYBI]-1;

   MH←0; WHILE 2↑(MH+1)≤HI DO MH←MH+1;
   MW←0; WHILE 2↑(MW+1)≤WI DO MW←MW+1;

   WI←2↑MW; HI←2↑MH;
   END;

   BEGIN
   REAL ARRAY A[0:PSIZ];

      BEGIN
      INTEGER ARRAY PIC[0:PFLDIM(INFL)];
      GETPFL(INFL,PIC[0]);

      FOR I←0 STEP 1 UNTIL HI-1 DO
      FOR J←0 STEP 1 UNTIL WI-1 DO
         A[I*WI+J]←PIXEL(PIC[0],I,J);
      END;


      BEGIN
      REAL ARRAY B[0:PSIZ];
      REAL N,Q;

      N←2↑(MW+MH); Q←1/SQRT(N);


      FOR I←0 STEP 1 UNTIL HI-1 DO
      FOR J←0 STEP 1 UNTIL WI-1 DO
         B[I*WI+J]←0;

      REORDER(A,B,HI*WI,MW,WI,FALSE); REVFFT2(A,B,HI*WI,MW,WI);
      REORDER(A,B,HI*WI,MH,HI*WI,FALSE); REVFFT2(A,B,HI*WI,MH,HI*WI);

      FOR I←0 STEP 1 UNTIL HI-1 DO
      FOR J←0 STEP 1 UNTIL WI-1 DO
         A[I*WI+J]←(Q*SQRT(B[I*WI+J]↑2+A[I*WI+J]↑2) MAX 0) MIN PXMAX;
   
      END;

      BEGIN
      INTEGER ARRAY PIC[0:PFLDIM(INFL)];
      GETPFL(INFL,PIC[0]);
      FOR I←0 STEP 1 UNTIL HI-1 DO
      FOR J←0 STEP 1 UNTIL WI-1 DO
         PUTEL(PIC[0],I,J,A[I*WI+J]);
      PUTPFL(PIC[0],OUFL);
      END;


   END;

END;